/*
浅拷贝只是简单的将对象的值(包括指针的地址)赋值给新的对象，
浅拷贝只是复制指针本身的值，而不会为指针指向的动态内存分配新的空间。
这意味着两个对象中的指针将指向同一块内存，会造成指针悬挂。

*/
#include <iostream>
#include <string>

using namespace std;

class stu
{

private:
	int val;

public:
	int *ptr;

public:
	stu() : val(5)
	{
		cout << val << "无参构造" << endl;
	}
	stu(int val) : val(val)
	{
		cout << val << "有参构造" << endl;
	}

public:
	void show()
	{
		cout << val << endl;
		cout << *ptr << endl;
	}
};

int main(int argc, char const *argv[])
{
	stu s1;
	s1.ptr = new int(80); // 为指针申请新的空间并初始化

	// 默认赋值运算符重载
	stu s2 = s1; // 浅拷贝,当修改一个对象时，另一个对象也会改变   当对象被销毁时，如果两个对象释放同一个内存会造成双重释放，
	*(s1.ptr) = 90; 
	s2.show();

	// 默认拷贝构造函数
	stu s3(s1);
	s3.show();

	return 0;
}
